package rocket.demo.tmp.transactionDemo01;

import org.apache.rocketmq.client.producer.LocalTransactionState;
import org.apache.rocketmq.client.producer.TransactionListener;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.common.message.MessageExt;

import java.text.SimpleDateFormat;
import java.util.Date;

public class TransactionListenerImpl implements TransactionListener {
  
  // 执行本地事务的方法
  @Override
  public LocalTransactionState executeLocalTransaction(Message message, Object o) {
    //设置日期格式
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    System.out.println("执行本地事务..........");
    System.out.println("update A ... where transactionId:" + message.getTransactionId() + ":" + df.format(new Date()));


//    todo 情况1：本地事务成功
//    System.out.println("commit");
//    return LocalTransactionState.COMMIT_MESSAGE;

//     todo 情况2：本地事务失败
//    System.out.println("rollback");
//     return LocalTransactionState.ROLLBACK_MESSAGE;
    
    
    // todo 情况3：业务复杂，还处于中间过程或者依赖其他操作的返回结果，就是unknow
    System.out.println("业务比较长，还没有处理完，不知道是成功还是失败！");
    // 接下来会在回查的过程中进行执行
    return LocalTransactionState.UNKNOW;
  }
  
  
  // 事务回查的方法
  @Override
  public LocalTransactionState checkLocalTransaction(MessageExt messageExt) {
    //打印每次回查的时间
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    // new Date()为获取当前系统时间
    System.out.println("checkLocalTransaction:" + df.format(new Date()));


//    todo 情况1：本地事务成功
    System.out.println("commit");
    return LocalTransactionState.COMMIT_MESSAGE;

//     todo 情况2：本地事务失败
//    System.out.println("rollback");
//     return LocalTransactionState.ROLLBACK_MESSAGE;
    
    
    // todo 情况3：业务复杂，还处于中间过程或者依赖其他操作的返回结果，就是unknow
//    System.out.println("业务比较长，还没有处理完，不知道是成功还是失败！");
    // 接下来会在回查的过程中进行执行
//    return LocalTransactionState.UNKNOW;
  }
}
